/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2006，所有权利保留。
 * 
 * 文件名：	IBRoleMgr.java
 * 模块说明：	
 * 修改历史：
 * 2006-8-21 - lxm - 创建。
 */
package com.hd123.rumba.user.biz;

import java.util.List;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.domain.biz.SDomain;
import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.gwt.base.client.biz.BPersistent;
import com.hd123.rumba.runtime.OperateContext;
import com.hd123.rumba.runtime.biz.IBManager;
import com.hd123.rumba.user.biz.share.IBRoleMemberAgent;
import com.hd123.rumba.user.biz.share.IBRoleShareAgent;
import com.hd123.rumba.util.ClassifiedHashtable;

/**
 * 角色 | 业务层 | 管理员 | 接口类
 * 
 * @author lxm
 * 
 */
public interface IBRoleMgr extends IBManager {

  /**
   * 创建一个新的角色。
   * 
   * @param domainUuid
   *          被创建角色所属域的uuid。
   * @return 返回创建的角色。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BRole createRole(String domainUuid) throws BusinessException, HibernateException;

  /**
   * 根据uuid载入角色。
   * 
   * @param uuid
   *          被载入角色的uuid。
   * @return 被载入的角色，若找不到返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public BRole loadRole(String uuid) throws BusinessException, HibernateException;

  /**
   * 载入指定角色包含的用户。
   * <p>
   * 只包含可用的用户。
   * 
   * @param roleUuid
   *          指定角色的uuid。
   * @return 返回用户列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<SUser> loadRoleUsers(String roleUuid) throws BusinessException, HibernateException;

  /**
   * 保存指定角色。
   * 
   * @param role
   *          被保存的角色。
   * @param operate
   * @return 返回出错信息，若执行正确则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable saveRoleT(BRole role, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 保存指定角色包含的用户。
   * <p>
   * 利用指定角色进行共享控制，并将产生指定角色的EntityLog。
   * 
   * @param roleUuid
   *          指定角色的uuid。
   * @param users
   *          指定角色所拥有的用户列表。
   * @param operate
   * @param roleOca
   *          指定角色的oca。
   * @return 返回出错信息，若执行正确则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public ClassifiedHashtable saveRoleUsersT(String roleUuid, List<SUser> users,
      OperateContext operate, long roleOca) throws BusinessException, HibernateException;

  /**
   * 删除指定的角色。
   * <p>
   * 不能删除非本域创建的公共角色。
   * 
   * @param roleUuid
   *          被删除角色的uuid。
   * @param operate
   * @param oca
   * @throws BusinessException
   * @throws HibernateException
   */
  public void deleteRoleT(String roleUuid, OperateContext operate, long oca)
      throws BusinessException, HibernateException;

  /**
   * 恢复删除指定的角色。
   * <p>
   * 不能恢复删除非本域创建的公共角色。
   * 
   * @param roleUuid
   *          被恢复角色的uuid。
   * @param operate
   * @param oca
   * @throws BusinessException
   * @throws HibernateException
   */
  public void undeleteRoleT(String roleUuid, OperateContext operate, long oca)
      throws BusinessException, HibernateException;

  /**
   * 根据uuid取得角色。
   * 
   * @param uuid
   *          被查找角色的uuid。
   * @param bizClass
   *          指定返回的角色对象类型。
   * @return 返回取得的角色，若找不到返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getRole(String uuid, Class<T> bizClass) throws BusinessException,
      HibernateException;

  /**
   * 根据uuid取得可用的角色。
   * 
   * @param uuid
   *          被查找角色的uuid。
   * @param bizClass
   *          指定返回的角色对象类型。
   * @return 返回取得的角色，若找不到返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getValidRole(String uuid, Class<T> bizClass) throws BusinessException,
      HibernateException;

  /**
   * 根据代码取得角色。
   * 
   * @param domainUuid
   *          被查找角色所属域的uuid。
   * @param code
   *          被查找角色的代码。
   * @param bizClass
   *          指定返回角色的对象类型。
   * @return 返回找到的角色，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public <T extends BPersistent> T getRoleByCode(String domainUuid, String code, Class<T> bizClass)
      throws BusinessException, HibernateException;

  /**
   * 取得指定域中所有可用的角色。
   * 
   * @param domainUuid
   *          指定域的uuid。
   * @return 返回符合条件的角色列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<BRole> getAllRoles(String domainUuid) throws BusinessException, HibernateException;

  /**
   * 创建指定角色的权限维护代理对象。
   * 
   * @param roleUuid
   *          指定的角色uuid。
   * @return 创建的权限维护代理对象。
   * @throws BusinessException
   */
  public IBPermAgent createRolePermAgent(String roleUuid) throws BusinessException;

  /**
   * 创建指定角色的权限维护代理对象。
   * 
   * @param roleUuid
   *          指定的角色uuid。
   * @return 创建的权限维护代理对象。
   * @throws BusinessException
   */
  public IBRoleShareAgent createRoleShareAgent(String roleUuid) throws BusinessException;

  /**
   * 创建指定角色的用户共享代理对象。
   * 
   * @param roleUuid
   *          指定的角色uuid。
   * @return 创建的角色共享代理对象。
   * @throws BusinessException
   */
  public IBRoleMemberAgent createRoleMemberAgent(String roleUuid) throws BusinessException;

  /**
   * 读取角色共享的域的列表。
   * 
   * @param roleUuid
   *          角色
   * @return 域的列表
   * @throws HibernateException
   * @throws BusinessException
   */
  public List<SDomain> loadRoleShareDomains(String roleUuid) throws HibernateException,
      BusinessException;
}
